package com.tiancheng.trade.merchant.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.tiancheng.trade.commom.core.data.PageInfo;
import com.tiancheng.trade.commom.core.enums.PaymentChannelEnum;
import com.tiancheng.trade.commom.web.model.request.*;
import com.tiancheng.trade.commom.web.model.request.merchant.*;
import com.tiancheng.trade.commom.web.model.response.*;
import com.tiancheng.trade.merchant.dto.MerchantRegNotifyRes;
import com.tiancheng.trade.merchant.model.MerchantPayReg;
import com.tiancheng.trade.merchant.vo.merchant.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * @Author: kellen
 * @Description: 商户进件相关接口
 * @Date: create in 2024/11/19 15:20
 */
public interface IMerchantPayRegService extends IService<MerchantPayReg> {
    /**
     * @param file    文件
     * @param regMode 进件模式：0-人工进件，1-自助进件
     * @return
     */
    MerchantPayRegFileResVO upload(MultipartFile file, Integer regMode, String termNo);

    /**
     * 资料上传
     *
     * @param file         文件
     * @param documentType 证件类型
     * @param regMode      进件模式：0-人工进件，1-自助进件
     * @return
     */
    MerchantPayRegFileResVO upload(MultipartFile file, String documentType, Integer regMode, String termNo);

    /**
     * 商户注册-最新版
     *
     * @param registerMerchantReqVO
     * @return
     */
    MerchantRegAllInfoNewRes registerMerchantNew(RegisterMerchantReqNewVO registerMerchantReqVO);

    /**
     * 获取地区信息
     *
     * @param dataType 文件类型 province,city,county,mcc可选，分别对应省、市、区和行业数据。
     * @return
     */
    String regionData(String dataType, String termNo);

    /**
     * 查询支行列表
     *
     * @param merchantBranchBankListReqVO
     * @return
     */
    List<MerchantBranchBankListResVO> branchBankList(MerchantBranchBankListReqVO merchantBranchBankListReqVO);

    /**
     * 发起对公账户验证交易
     *
     * @param param
     */
    RequestAccountVerifyResVO requestAccountVerify(RequestAccountVerifyRequest param);

    /**
     * 对公账户认证
     *
     * @param param
     */
    CompanyAccountVerifyResVO companyAccountVerify(RequestCompanyAccountVerifyRequest param);

    /**
     * 前台签约接口
     *
     * @param param
     * @return
     */
    MerchantAgreementSignResVO agreementSign(MerchantPayRegAgreementSignRequest param);

    /**
     * 机构子商户号查询
     *
     * @param orgPaymentChannelId
     * @return
     */
    List<MerchantChannelResponseDTO> queryOrgSubMerchant(List<Long> orgPaymentChannelId);

    /**
     * 查询支付子商户集合
     *
     * @param params 查询参数
     * @return
     */
    List<MerchantChannelResponseDTO> listSubMerchant(List<MerchantChannelRequestDTO> params);

    // 变更接口--------------------------------------------------------------------------------------------------------变更接口-----

    MerchantRegAllInfoRes queryRegisterMerchant(String shopLic, Long orgPaymentChannelId);

    /**
     * 查询注册商户明细
     *
     * @param regId
     * @return
     */
    MerchantRegAllInfoRes queryRegisterMerchant(Long regId);

    PageInfo<QueryMerchantRegResVO> findPageList(QueryMerchantRegReqVO queryMerchantRegReqVO);

    /**
     * 手动设置商户进件信息
     *
     * @param req
     */
    void manualSettingChannelInfo(ManualSettingChannelInfoReq req);

    /**
     * 查询商户进件状态
     *
     * @param params
     * @return
     */
    MerchantRegStatusQueryRes queryMerchantRegStatus(MerchantRegStatusQueryReqVO params);

    /**
     * 设置商户清分信息
     *
     * @param ruleReqVO
     */
    void setSettleRule(MerchantPayRegSettleRuleReqVO ruleReqVO);

    /**
     * 根据文件记录id查询
     *
     * @param fileIds
     * @return
     */
    List<MerchantPayRegFileResVO> queryFileList(List<Long> fileIds);

    /**
     * 回调消息处理
     *
     * @param paramsMap      回调参数
     * @param paymentChannel 支付通道
     * @return
     */
    MerchantRegNotifyRes notifyHandler(Map<String, Object> paramsMap, PaymentChannelEnum paymentChannel);

    /**
     * 处理消息并回调业务系统
     *
     * @param messageBody
     * @return
     */
    Object handleUmsMsgAndNotifyBusiness(Map<String, Object> messageBody);

    /**
     * 删除文件
     *
     * @param fileId
     */
    void deleteFile(String fileId);

    /**
     * 查询行业信息
     *
     * @param params 行业查询参数
     * @return
     */
    List<QueryMccRes> queryMcc(MerchantRegQueryMccReqVO params);

    List<QueryMccRes> queryMccByCode(MerchantRegQueryMccReqVO params);

    /**
     * 个体商户，发送短信验证码
     *
     * @param params
     */
    void smsSend(MerchantRegSendSmsReqVO params);

    /**
     * 个体商户，短信验证码验证
     *
     * @param params
     */
    void smsVerify(MerchantRegSmsVerifyReqVO params);
}
